/**
 * 用于简化代码的工具库
 */
#include "include/core.h"
#include <magic.h>


/**
 * 检测条件，如果符合则发出终止信号
 * cdn: 条件结果
 * msg: 终止前提示语句
 */
void error_check(int cdn, char * msg)
{
    if (cdn) {
        puts(msg);  // 提示错误
        raise(SIGINT);  // 终止
    }
}

/**
 * 监听终止信号的简写函数
 * func: 参数为一个int类型的函数指针
 */
void desc_listener(void (*func)(int))
{
    if (signal(SIGINT, func) == SIG_ERR) {
        puts("程序结束过程中出现错误");
        exit(0);
    }
}

/**
 * 判断是否为cgi程序
 * url: 判断路径
 */
int iscgi(char * url)
{
    if (strstr(url, ".cgi") == NULL) {
        return 0;
    }
    return 1;
}

/**
 * 获取文件的mime类型
 * path: 文件路径
 * mime_swap: 承接类型的指针
 * 返回: char * 文件类型描述串
 */
int file_mime(char * path, char * mime_swap)
{
    struct magic_set * ms = NULL;
    if ((ms = magic_open(MAGIC_MIME)) == NULL) {
        puts("打开文件失败");
        return -1;
    }
    if (magic_load(ms, NULL) == -1) {
        puts("文件类型检测失败");
        return -2;
    }
    strcpy(mime_swap, magic_file(ms, path));
    strcpy(mime_swap, strtok(mime_swap, ";"));
    return 0;
}